如何在Android中执行TDD? 第2部分 - 项目体系结构,设置和单元测试(译)

原文

本教程将通过项目体系结构,从头开始设置,最后我们将编写一些单元测试。

而本系列的第1部分,我们介绍了什么是自动化测试的重要性,什么是测试金字塔,什么是测试类型,可以使用什么工具在Android中执行TDD以及测试文件夹的位置。

项目架构

根据自动化测试,我们必须遵循某种架构模式,这将有助于我们以清晰,可测试的方式测试和构建应用程序。

有许多架构模式可轻松支持TDD Model - View - Presenter(MVP)Model - View - Viewmodel(MVVM)

我们正在为我们的教程系列选择MVP。

  1. Model通常是由Presenter和View用来传达信息或采取行动的POJO。
  2. View(Activity或Fragment)是显示数据的被动界面。这是我们设置数据并进行UI相关更改(如隐藏,移动视图)的地方。
  3. Presenter决定演示逻辑,我们的业务逻辑驻留在这里。 它与存储库交谈获取数据,并将其格式化以显示在视图中。 它决定在View.Try上显示什么,尽量避免在演示者中使用Android特定的代码(我知道有时更难)。

项目设置

在这篇文章中,我们将从头开始创建简单的Android应用程序。 我们将创建的应用程序是简单的应用程序,登录并采取学生出席。

  1. 打开Android Studio选择“Start a new Android Project

  2. 输入应用程序名称为“StudentAttendance”,公司域名为“nilesh.tdd.com”。 点击下一步

  3. 选择你想要支持的Android版本并点击“Next

  4. 选择“Empty Activity”并点击“Next

  5. 输入活动名称,然后单击“Finish

  6. 最终的项目结构将如下图所示

单元测试

在对包结构进行一些重构之后,签出提交(81d1668667bcb5eacf4cf94a8dffe738ad206d67)

使用下面的命令

1
2
git clone  https://github.com/NileshJarad/TDD_Demo.git
git checkout 81d1668667bcb5eacf4cf94a8dffe738ad206d67

如果有人在结帐后出现错误

然后在build.gradle中将build.gradle版本更改为2.1.2

所以最后我们在这里编程了。

现在我们将编写我们的第一个测试用例来检查“如果用户在三次尝试后尝试登录,我们会向他/她显示错误消息

转到com.tdd.nilesh.studentattendance.login.LoginPresenter类。 在类名上使用光标,按SHIFT + CTRL + T(对于mac SHIFT + CMD + T),这将弹出带有Create New Test选项的窗口。

它将自动为Test选择类名,并在我们的例子LoginPresenterTest的类名末尾追加Test。

点击确定。 它会再次弹出窗口的测试文件夹。 在我们编写JUnit时,请选择../app/src/test/…它将创建具有相同包结构的测试类。

我正在发布代码的快照,因为我希望您编写代码。😊
现在我们将写下如下屏幕截图中的测试。

@Test注释表明它是测试。 由于incrementLoginAttemptisLoginAttemptExceeded以红色显示。 我们必须在LoginPresenter中创建方法。 按ALT + ENTER,将在演示者类中创建方法,如下所示。

我们写了失败的测试。 逐渐我们会为它编写它的实现。 要运行测试,请按测试名称左侧的小绿色播放图像。

由于我们编写的测试失败测试输出应如下所示。
我们期待1作为输出,但我们得到0。

现在我们将编写通过测试的测试实现。 以下是通过测试的实施。

再次运行测试它应该传递😍。

直到现在,使用以下结帐命令进行回购。

1
git checkout 302962ea6f63aa3afba003efa043ebacbaf02345

现在您必须编写checkIfLoginAttemptIsNotExceeded测试,并检查您的实现是否正确。 如果你不是,不要担心它会在下一次提交。

现在我们要检查“用户名和密码是否正确”

所以我们会写测试,下面是它的样子(失败测试😉)

再次重复ALT + ENTER和运行测试的过程。 由于测试失败,它会显示红色警报失败。

现在我们将编写它的实现如下。

再次运行测试它现在会通过。

现在尝试使用checkUsernameAndPasswordIsInCorrect测试用例。

直到现在,使用以下结帐命令进行回购。

1
git checkout 4771fbfb8c6cbda98d9f01ac5e035ea02f0f5da6

同时,希望听到有关这方面的建议和意见。

Cheers 🍻 !!!.